package redis

import (
	"context"
	"encoding/json"
)

// 以下方法扩展了Database接口，提供了集合操作支持

// SAdd 向集合添加一个或多个成员
func (d *DatabaseImpl) SAdd(ctx context.Context, key string, members ...any) error {
	return d.client.SAdd(ctx, key, members...).Err()
}

// SRem 移除集合中的一个或多个成员
func (d *DatabaseImpl) SRem(ctx context.Context, key string, members ...any) error {
	return d.client.SRem(ctx, key, members...).Err()
}

// SMembers 获取集合中的所有成员
func (d *DatabaseImpl) SMembers(ctx context.Context, key string) ([]string, error) {
	return d.client.SMembers(ctx, key).Result()
}

// SCard 获取集合中成员的数量
func (d *DatabaseImpl) SCard(ctx context.Context, key string) (int64, error) {
	return d.client.SCard(ctx, key).Result()
}

// JSON编码与解码工具函数

// EncodeJSON 将Go对象编码为JSON字符串
func EncodeJSON(v any) (string, error) {
	bytes, err := json.Marshal(v)
	if err != nil {
		return "", err
	}
	return string(bytes), nil
}

// DecodeJSON 将JSON字符串解码为Go对象
func DecodeJSON(data string, v any) error {
	return json.Unmarshal([]byte(data), v)
}
